 // ===================================util============================
 /**
  * @description 常用工具包
  * @namespace bs.util常用工具包
   * @type {{}}
  */
;bs.util = bs.util || {};
 /***
  * 是否String类型
  * @param value {object}
  * @returns {boolean}
  */
bs.util.isString = function (value) {
    return '[object String]' == Object.prototype.toString.call(value);
};
 /**
  * 是否Number类型
  * @param value {object}
  * @returns {boolean}
  */
bs.util.isNumber = function (value) {
    return '[object Number]' == Object.prototype.toString.call(value);
};
 /**
  * 是否为Array类型
  * @param value {object}
  * @returns {boolean}
  */
bs.util.isArray = function(value){
    return '[object Array]' == Object.prototype.toString.call(value);
};
 /**
  * 是否为Object类型
   * @param value {object}
  * @returns {boolean}
  */
bs.util.isObject = function(value){
    return (value && 'object' == typeof value);
};
 /***
  * 是否为Function 类型
  * @param value   {object}
  * @returns {boolean}
  */
 bs.util.isFunction = function (value) {
     return '[object Function]' == Object.prototype.toString.call(value);
 };
 /**
  * 是否未定义（未知）类型
  * @param value  {object}
  * @returns {boolean}
  */
bs.util.isUndefined = function (value) {
    return value == 'undefined' ? true:typeof value == 'undefined' ? true : false;
};
 /***
  * 是否NULL类型
  * @param value  {object}
  * @returns {boolean}
  */
bs.util.isNull = function(value){
    return (bs.util.isUndefined(value) || value == "" || value == null) ? true : false;
};

 /***
  * 是否为Element类型
  * @param value  {object}
  * @returns {boolean}
  */
bs.util.isElement = function(value){
    return !!(value && value.nodeName && value.nodeType == 1);
};
 /***
  * 是否Date类型
  * @param value  {object}
  * @returns {boolean}
  */
bs.util.isDate = function(value){
    return {}.toString.call(value) === "[object Date]" && value.toString() !== 'Invalid Date' && !isNaN(value);
};
 /***
  * 是否Boolean类型
  * @param value  {object}
  * @returns {boolean}
  */
bs.util.isBoolean = function(value){
    return typeof value === 'boolean';
};
 /***
  * 判断对象的包路径是否存在
  * @param path {string}
  * @param object {*|object}
  * @returns {boolean}
  *
  * @example
  * bs.util.isKeyExists('bs.xxx',bs)
  */
bs.util.isKeyExists = function(path, object){
    object = object || bs;
    var global = (function () { //在browser或者nodejs下，都能安全取得全局对象
        return this;
    }());
    var pathList = path.split('.'); //将传入的对象路径字符串拆分为数组
    var obj = null;
    var globalObj = global[pathList.shift()]; //从全局对象中取出名字为 数组[0]的对象
    obj = object || globalObj;  //如果指定了对象，就从对象中查找，如果没有就使用全局环境
    if (!obj) {
        return false;
    }
    for (var i = 0; key = pathList[i]; i++) {
        if (!obj[key]) {
            return false;
        }
        obj = obj[key];
    }
    return true;
};
 /***
  * 生成随机整数，范围是[min, max]
  * @param min {number}
  * @param max {number}
  * @returns {number}
  */
bs.util.randomInt = function (min, max) {
    return Math.floor(Math.random() * (max - min + 1) + min);
};



